"""
工作流模块 - 整合所有流程步骤，提供完整的评估工作流
"""
import os
import argparse
from typing import Dict, Any, Optional

from src.data_collection import run_evaluation_pipeline, cleanup_progress_files
from src.reranking import run_reranking_pipeline
from src.data_integration import run_integration_pipeline, run_from_python_api

def run_full_workflow(questions_csv: str,
                     output_dir: str = "results",
                     top_k: int = 50,
                     clean_progress: bool = False):
    """
    运行完整的工作流，包括数据收集、重排和评估
    
    参数:
        questions_csv: 问题CSV文件路径
        output_dir: 输出目录
        top_k: 每个问题检索的知识块数量
        clean_progress: 是否清理之前的进度文件，重新开始
    """
    # 创建必要的目录
    os.makedirs("data/raw", exist_ok=True)
    os.makedirs(output_dir, exist_ok=True)
    
    # 定义中间文件路径（保存在输出目录中）
    evaluation_results_csv = os.path.join(output_dir, "evaluation_results.csv")
    reranking_results_csv = os.path.join(output_dir, "reranking_results.csv")
    
    # 如果指定清理进度，删除之前的进度文件
    if clean_progress:
        print("\n" + "="*50)
        print("清理之前的进度文件")
        print("="*50)
        cleanup_progress_files(f"{evaluation_results_csv}.progress")
        print("进度文件已清理，将重新开始执行")
    
    # 1. 评分阶段 - 检索知识块并使用大模型评分
    print("\n" + "="*50)
    print("第1阶段: 知识块检索与评分")
    print("="*50)
    run_evaluation_pipeline(
        input_csv=questions_csv,
        output_csv=evaluation_results_csv,
        top_k=top_k
    )
    
    # 2. 重排阶段 - 调用重排模型API
    print("\n" + "="*50)
    print("第2阶段: 重排模型调用")
    print("="*50)
    run_reranking_pipeline(
        input_csv=evaluation_results_csv,
        output_csv=reranking_results_csv
    )
    
    # 3. 整合与评估阶段
    print("\n" + "="*50)
    print("第3阶段: 数据整合与评估")
    print("="*50)
    
    # # 使用Python API方式调用评估工具
    run_from_python_api(
        evaluation_csv=evaluation_results_csv,
        reranking_csv=reranking_results_csv,
        output_dir=output_dir
    )
    
    print("\n" + "="*50)
    print(f"工作流完成！评估结果已保存到 {os.path.abspath(output_dir)}")
    print("="*50)

def main():
    """命令行入口函数"""
    parser = argparse.ArgumentParser(description="重排模型评估工作流")
    parser.add_argument("--questions", type=str, default="data/raw/question_list.csv", help="问题CSV文件路径")
    parser.add_argument("--output-dir", type=str, default="results_v2", help="输出目录")
    parser.add_argument("--top-k", type=int, default=50, help="每个问题检索的知识块数量")
    parser.add_argument("--clean-progress", action="store_true", help="清理之前的进度文件，重新开始执行")
    
    args = parser.parse_args()
    
    run_full_workflow(
        questions_csv=args.questions,
        output_dir=args.output_dir,
        top_k=args.top_k,
        clean_progress=args.clean_progress
    )

if __name__ == "__main__":
    main() 